package stage_1_module_4.code.homework_4;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 *  *  使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器； 
  服务器接收到对象后判断用户对象信息是否为"admin"和 "123456"，若是则将UserMessage对象中的类型改为"success"，否则将类型改为"fail"并回发给客户端，客户端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。 
  其中 UserMessage 类的特征有：类型(字符串类型) 和 用户对象(User 类型)。 
  其中 User类的特征有：用户名、密码(字符串类型)。 
  如： 
UserMessage tum = new UserMessage("check", new User("admin", "123456"));  
 */
/**
 * 思路:
 * 1.声明socket连接并连接服务端地址127.0.0.1:8899
 * 2.分别读取屏幕用户输入的username和password
 * 3.声明UserMessage对象um,并设置其中User的username和password
 * 4.声明对象输出流oos，并输出um对象到socket的输出流
 * 5.声明对象输入流ois，读取socket的输入流对象obj
 * 6.如果输入流对象obj为UserMessage类型，声明inobj转换obj为UserMessage对象
 * 7.如果inobj的类型状态为success，打印登录成功，否则打印登录失败
 * 8.关闭各种连接
 */
public class Client {
    public static void main(String[] args) {
        Socket s = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        Scanner sc = new Scanner(System.in);

        try {
            s = new Socket("127.0.0.1", 8899);
            System.out.println("客户端连接成功");
            System.out.println("输入用户名");
            String username = sc.next();
            System.out.println("输入密码");
            String password = sc.next();
            sc.close();

            UserMessage um = new UserMessage("check", new User(username, password));
            oos = new ObjectOutputStream(s.getOutputStream());
            oos.writeObject(um);

            ois = new ObjectInputStream(s.getInputStream());
            Object obj = ois.readObject();
            if (obj instanceof UserMessage) {
                UserMessage inobj = (UserMessage) obj;
                if (inobj.getType().equals("success")) {
                    System.out.println("登录成功");
                } else {
                    System.out.println("登录失败");
                }
            }

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (null != s) {
                try {
                    s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (null != oos) {
                try {
                    oos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
